home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2888 / 2888.xpi / content / dragndrop.js < prev    next >
Text File  |  2009-07-20  |  5KB  |  150 lines

  1. var treeDrag=false;
  2. var dragSelection=null;
  3. var dragSource;
  4. var gmarksDragObserver = {
  5.   getSupportedFlavours : function () {
  6.     
  7.     var flavours = new FlavourSet();
  8.     
  9.     flavours.appendFlavour("text/x-moz-url");
  10.     /*
  11.     flavours.appendFlavour("text/uri-list");
  12.     flavours.appendFlavour("text/unicode");
  13.     flavours.appendFlavour("application/x-moz-file");
  14.     flavours.appendFlavour("text/html");
  15.     flavours.appendFlavour("text/x-moz-place");
  16.     */
  17.     flavours.appendFlavour("application/x-moz-tabbrowser-tab");
  18.     flavours.appendFlavour("text/x-moz-text-internal");
  19.     
  20.     return flavours;
  21.   },
  22.   /*
  23.   canDrop: function(evt, session){
  24.     dump("can drop?\n");
  25.     return true;
  26.   },
  27.   */
  28.   onDragOver: function (evt,flavour,session){
  29.     if (evt.dataTransfer){
  30.       this.flavour = flavour.contentType;
  31.       this.data = evt.dataTransfer.getData(this.flavour);
  32.       
  33.       if (this.flavour == "application/x-moz-tabbrowser-tab"){
  34.         this.data = evt.dataTransfer.mozGetDataAt("application/x-moz-tabbrowser-tab", 0);
  35.       }
  36.     }
  37.   },
  38.   onDragExit: function (evt, session){},
  39.   onDrop: function (evt,transferData,session){
  40.     treeDrag=false;
  41.     var flavour=transferData.flavour.contentType;
  42.     var data=transferData.data;
  43.     var tree=evt.currentTarget;
  44.     var index=pops.getEventIndex(evt);
  45.     this.handleDrop(data,flavour,index,tree);
  46.   },
  47.  
  48.  
  49.   treeDrop: function(index,tree){
  50.     this.handleDrop(this.data,this.flavour,index,tree);
  51.   },
  52.   handleDrop: function(data,flavour,index,tree){
  53.     try{
  54.     var label="";
  55.     var view=getTreeView(tree);
  56.     var visibleData=view.data;
  57.     
  58.     if (index != -1 && index<visibleData.length){
  59.       if (view.isContainer(index))
  60.         label=visibleData[index].fullTitle;
  61.       else{
  62.         label=view.getParentLabel(index);
  63.       }
  64.     }
  65.     if (label==GMS.unlabeled ||
  66.         label==GMS.strbundle.GetStringFromName("mostrecent") ||
  67.         label==GMS.strbundle.GetStringFromName("mostused")){
  68.       label="";
  69.     }
  70.     var url=null;
  71.     var title=null;
  72.     if (flavour=="text/x-moz-url" || flavour=="text/x-moz-text-internal"){
  73.       data=data.toString().split('\n');
  74.       if (data.length==1) data.push(data[0]);
  75.       url=data[0];
  76.       title=data[1];
  77.     } else if (flavour == "application/x-moz-tabbrowser-tab"){
  78.       var browser = data.parentNode.parentNode.parentNode.parentNode.getBrowserForTab(data);
  79.       url = browser.currentURI.spec;
  80.       title = data.getAttribute("label");
  81.     }
  82.     var bmIndex;
  83.     var bm;
  84.     if (false && (bmIndex=GMS.isBookmarked(url))){
  85.       //Add Label to Bookmark
  86.       bm=GMS.getBookmark(bmIndex);
  87.       if (label != "") GMS.addLabelToBookmark(bm,label,true);
  88.     }
  89.     else{
  90.       //Create new bookmark
  91.       var labels=new Array();
  92.       if (label!="") labels.push(label);
  93.       bm=GMS.createNewBookmark(0,url,title,labels,"");
  94.       GMS.updateBookmark(bm,true);
  95.       /* Create a bookmark action so it can be undone */
  96.       GMS.generateBkmkAction("bookmark","add",bm);
  97.       GMS.sendUpdateBookmark(bm);
  98.     }
  99.     }catch(e){
  100.       dump("eeee: "+e+"\n");
  101.     }
  102.   },
  103.  
  104.   onDragStart: function (evt , transferData, action){
  105.     var data,type;
  106.     transferData.data=new TransferData();
  107.     var tree=evt.currentTarget;
  108.     var visibleData=getTreeView(tree).data;
  109.     var index=tree.currentIndex;
  110.     if (tree.view.isContainer(index)){
  111.       //Its a label
  112.       type="text/gmarks-label";
  113.     }
  114.     else{
  115.       //Its a bookmark
  116.       type="text/gmarks-bookmark";
  117.     }
  118.     transferData.data.addDataForFlavour(type,visibleData[index]);
  119.     if (type=="text/gmarks-bookmark"){
  120.       var url=visibleData[index].url; var title=visibleData[index].title;
  121.       var urlString = url + "\n" + title;
  122.       var htmlString = "<a href=\"" + url + "\">" + title + "</a>";
  123.  
  124.       transferData.data = new TransferData();
  125.       transferData.data.addDataForFlavour("text/x-moz-url", urlString);
  126.       transferData.data.addDataForFlavour("text/unicode", url);
  127.       transferData.data.addDataForFlavour("text/uri-list", url);
  128.       transferData.data.addDataForFlavour("text/plain", url);
  129.       transferData.data.addDataForFlavour("text/html", htmlString);
  130.     }
  131.     //transferData.data.addDataForFlavour("text/unicode",plainText);
  132.  
  133.   },
  134.   onTreeDragGesture: function (evt) {
  135.     treeDrag=true;
  136.     var row = { }, col = { }, child = { };
  137.     evt.currentTarget.treeBoxObject.getCellAt(evt.pageX, evt.pageY, row, col, child);
  138.     // Make sure we are not dragging the scroll bar
  139.     if (!col.value) {return;}
  140.       keyEvent=evt;
  141.     var tree=evt.target.parentNode;
  142.     dragSelection=tree.view.selection;
  143.     dragSource=getTreeView(tree);
  144.  
  145.     // "real" drag
  146.     nsDragAndDrop.startDrag(evt,gmarksDragObserver);
  147.     evt.stopPropagation();
  148.   }
  149. };
  150.